package estoque;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;


import pessoa.Fornecedor;

/**
 * Essa representa um produto no estoque, ela mantem todas as informacoes deste
 * 
 * Obs: esta definida apenas a estrutura da classe, os metodos devem ser implementados
 * e suas assinaturas alteradas de acordo com a necessidade
 */
public class Produto {

	private int codigo;
	private String nome;
	private int quantidade;
	private Fornecedor fornecedor;
	private double preco_venda;
	private double preco_custo;
	private double taxa_juros;
	private java.sql.Date data_entrada;
	private java.sql.Date data_vencimento;


	/**
	 * Esse construtor deve ser util quando for cadastrar um produto, 
	 * pois nao precisa-se inforamaro codigo nem a data de entrada, alem disso
	 * a data_vencimento pode ser passada como uma string
	 * 
	 * @param nome
	 * @param quantidade
	 * @param fornecedor
	 * @param preco_venda
	 * @param preco_custo
	 * @param taxa_juros
	 * @param data_vencimento data no formato dd/mm/aaaa
	 * 
	 * @throws ParseException Se a data estiver no formato errado
	 */
	public Produto(String nome, int quantidade, Fornecedor fornecedor, double preco_venda,
			double preco_custo, double taxa_juros, String data_vencimento)
			throws ParseException{

		SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
		
		this.nome = nome;
		this.quantidade = quantidade;
		this.fornecedor = fornecedor;
		this.preco_venda = preco_venda;
		this.preco_custo = preco_custo;
		this.taxa_juros = taxa_juros;
		this.data_entrada = new java.sql.Date(Calendar.getInstance().getTimeInMillis());
		this.data_vencimento = new java.sql.Date(formatador.parse(data_vencimento).getTime());

	}

	/**
	 * Esse deve ser util quando for recuperar um objeto do banco de dados, pois recebe o valor
	 * do codigo q vai ser gerado pelo banco
	 * 
	 * @param codigo
	 * @param nome
	 * @param quantidade
	 * @param fornecedor
	 * @param preco_venda
	 * @param preco_custo
	 * @param taxa_juros
	 * @param data_entrada
	 * @param data_vencimento
	 */
	public Produto(int codigo, String nome, int quantidade, Fornecedor fornecedor, double preco_venda,
			double preco_custo, double taxa_juros, java.sql.Date data_entrada, java.sql.Date data_vencimento){

		this.codigo = codigo;
		this.nome = nome;
		this.quantidade = quantidade;
		this.fornecedor = fornecedor;
		this.preco_venda = preco_venda;
		this.preco_custo = preco_custo;
		this.taxa_juros = taxa_juros;
		this.data_entrada = data_entrada;
		this.data_vencimento = data_vencimento;

	}


	/** 
	 *Esse metodo serve para verificar se um produto esta vencido ou nao
	 */
	public void checarVencimento(){

	}

	/**
	 * Retorna uma String formatada contendo os dados do produto 
	 */
	public String toString(){
		
		
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		
		/*
		 * Concatena o conteudo dos atributos a string
		 */
		String result =  "Codigo: " + codigo
				+ "\nNome: " + nome
				+ "\nQuantidade em estoque: " + quantidade
				+ "\nFornecedor :" + fornecedor.getNome()
				+ "\nPreco de Venda: " + preco_venda
				+ "\nPreco de Custo: " + preco_custo
				+ "\nTaxaJuros: " + taxa_juros;

		/*
		 * Caso nao tenha sido inserida a data de entrada e vencimento no banco de dados,
		 * esse atributos podem ser null, o que ocasionaria um erro 
		 */
		if(data_entrada != null){
			
			result += "\nData de Entrada: " + format.format(data_entrada);
			
		}else{
			
			result += "\nData de Entrada: ---";
			
		}

		if(data_vencimento != null){
			
			result += "\nData de Vencimento: " + format.format(data_vencimento);
			
		}else{
			
			result += "\nData de Vencimento: ---";
		}
		
		return result;

	}


	//Metodos Get e Set
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public double getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public double getPreco_custo() {
		return preco_custo;
	}

	public void setPreco_custo(double precoCusto) {
		this.preco_custo = precoCusto;
	}

	public double getTaxa_juros() {
		return taxa_juros;
	}

	public void setTaxa_juros(double taxaJuros) {
		this.taxa_juros = taxaJuros;
	}

	public java.sql.Date getData_entrada() {
		return data_entrada;
	}

	public void setData_entrada(java.sql.Date data_entrada) {
		this.data_entrada = data_entrada;
	}

	public java.sql.Date getData_vencimento() {
		return data_vencimento;
	}

	public void setData_vencimento(java.sql.Date data_vencimento) {
		this.data_vencimento = data_vencimento;
	}

	public int getCodigo() {
		return codigo;
	}

	public double getPreco_venda() {
		return preco_venda;
	}
}
